package com.project.bookstore.user.service;

import com.project.bookstore.common.CommonResult;
import com.project.bookstore.user.pojo.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;


public interface UserService {
    //上传头像
    String updateAvatar(MultipartFile userImg) throws IOException;
    //修改个人资料
    CommonResult<Void> updatePersonalData(UserPersonalDataVO user);
    //修改密码
    CommonResult<Void> updatePassword(Long id, String password,String oldPass);
    //登录
    CommonResult<UserLoginVO> login(LoginVO user,HttpServletRequest request);
    //个人中心 info
    CommonResult<MineInfoVO> mineInfo(Long id);
    //个人中心 修改个人资料回显
    CommonResult<UserPersonalDataVO> getPersonalData(Long id);

    /**
     * 获取登录状态
     * @return
     */
    CommonResult<Void> getState(Long id, HttpServletRequest request);

    CommonResult register(RegisterVO registerVO);

    /**
     * 注册时用户名查重
     * @param userName 客户端用户名
     * @return 已存在 40900, 不存在 20000
     */
    CommonResult checkIsUserNameExist(String userName);

    /**
     * 用于模拟手机验证码
     * @param phone 手机号
     * @return 验证码
     */
    CommonResult<String> getVerificationCode(String phone);

    /**
     * 验证密码
     * @param password 客户端密码
     * @return 是否与数据库密码一致
     */
    CommonResult<Void> checkPassword(Long id ,String password);

    /**
     * 验证验证码是否正确
     * @param phone 手机号
     * @param verificationCode 验证码
     * @return 是否通过
     */
    CommonResult<Void> checkVerificationCode(String phone, String verificationCode);

    /**
     * 修改手机号
     * @param phone 新手机号
     * @param id 用户id
     * @return 是否成功
     */
    CommonResult updatePhone( Long id ,String phone);
    /**
     * 修改邮箱
     * @param email 新邮箱
     * @param id 用户id
     * @return 是否成功
     */
    CommonResult updateEmail(Long id, String email);

    /**
     * 根据id获取手机号
     * @param id 用户id
     * @return 手机号
     */
    CommonResult<String> getPhoneById(Long id);

    /**
     * 根据id获取邮箱
     * @param id 用户id
     * @return 邮箱
     */
    CommonResult<String> getEmailById(Long id);

    /**
     * 登录后首部菜单栏个人信息
     * @param id 用户id
     * @return 昵称、头像
     */
    CommonResult<UserMenuPersonalSourceVO> getMenuPersonalSource(Long id);

    /**
     * 登出
     * @param id 用户id
     * @return void
     */
    CommonResult<Void> logout(Long id);

    /**
     * 支付页面获取地址信息
     * @param userId
     * @return
     */
    CommonResult<List<AddressForPayVO>> getAddressForPay(Long userId);

    /**
     * 更新用户昵称
     * @param nick
     * @return
     */
    CommonResult updateNick(Long userId,String nick);

}
